/**
 * 猫狗分类器训练脚本
 * 功能：加载训练数据，训练模型，保存训练结果
 * 使用方法：npm run train
 */

// 引入自定义的简单图像分类器类
const SimpleImageClassifier = require('../models/simple_classifier');
// 引入Node.js路径处理模块，用于构建文件路径
const path = require('path');

/**
 * 异步训练模型的主函数
 * 执行完整的训练流程：数据加载 -> 模型训练 -> 结果保存
 */
async function trainModel() {
  // 打印训练开始信息和分隔线
  console.log('🎓 开始训练猫狗分类器');
  console.log('=' .repeat(50)); // 输出50个等号作为分隔线
  
  try {
    // 创建SimpleImageClassifier类的实例对象
    const classifier = new SimpleImageClassifier();
    
    // 第一步：加载训练数据
    console.log('📂 加载训练数据...');
    // 显示当前配置的训练样本数量（从静态变量读取）
    console.log(`🎯 使用训练样本数量: ${SimpleImageClassifier.MAX_TRAINING_SAMPLES}`);
    // 构建训练数据目录的绝对路径（../../images/train）
    const trainDataPath = path.join(__dirname, '../../images/train');
    // 异步加载训练数据，等待数据处理完成
    await classifier.loadTrainingData(trainDataPath);
    
    // 第二步：训练模型
    console.log('🎓 开始训练模型...');
    // 调用训练方法：200个训练轮次，学习率0.1
    classifier.train(200, 0.1);
    
    // 第三步：保存训练好的模型
    // 构建模型保存路径（../../models/simple_model.json）
    const modelPath = path.join(__dirname, '../../models/simple_model.json');
    // 将训练好的权重参数保存到JSON文件
    classifier.saveModel(modelPath);
    
    // 打印训练成功信息
    console.log('✅ 训练完成！');
    console.log(`📁 模型已保存到: ${modelPath}`);
    console.log('🚀 现在可以启动服务器: npm start');
    
  } catch (error) {
    // 捕获训练过程中的任何错误并打印错误信息
    console.error('❌ 训练失败:', error.message);
  }
}

// 立即执行训练函数，开始训练流程
trainModel();
